package cn.iocoder.yudao.module.ai.service.creationcategory;

import java.util.*;
import jakarta.validation.*;
import cn.iocoder.yudao.module.ai.controller.admin.creationcategory.vo.*;
import cn.iocoder.yudao.module.ai.dal.dataobject.creationcategory.CreationCategoryDO;
import cn.iocoder.yudao.module.ai.dal.dataobject.creationmodel.CreationModelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 创作类别 Service 接口
 *
 * @author 芋道源码
 */
public interface CreationCategoryService {

    /**
     * 创建创作类别
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCreationCategory(@Valid CreationCategorySaveReqVO createReqVO);

    /**
     * 更新创作类别
     *
     * @param updateReqVO 更新信息
     */
    void updateCreationCategory(@Valid CreationCategorySaveReqVO updateReqVO);

    /**
     * 删除创作类别
     *
     * @param id 编号
     */
    void deleteCreationCategory(Long id);

    /**
     * 获得创作类别
     *
     * @param id 编号
     * @return 创作类别
     */
    CreationCategoryDO getCreationCategory(Long id);

    /**
     * 获得创作类别分页
     *
     * @param pageReqVO 分页查询
     * @return 创作类别分页
     */
    PageResult<CreationCategoryDO> getCreationCategoryPage(CreationCategoryPageReqVO pageReqVO);

    // ==================== 子表（创作模型） ====================

    /**
     * 获得创作模型分页
     *
     * @param pageReqVO 分页查询
     * @param categoryId 类别id
     * @return 创作模型分页
     */
    PageResult<CreationModelDO> getCreationModelPage(PageParam pageReqVO, Long categoryId);

    /**
     * 创建创作模型
     *
     * @param creationModel 创建信息
     * @return 编号
     */
    Long createCreationModel(@Valid CreationModelDO creationModel);

    /**
     * 更新创作模型
     *
     * @param creationModel 更新信息
     */
    void updateCreationModel(@Valid CreationModelDO creationModel);

    /**
     * 删除创作模型
     *
     * @param id 编号
     */
    void deleteCreationModel(Long id);

	/**
	 * 获得创作模型
	 *
	 * @param id 编号
     * @return 创作模型
	 */
    CreationModelDO getCreationModel(Long id);

}